package com.lxj.utils;

import java.io.ByteArrayOutputStream;
import java.util.zip.Deflater;
import java.util.zip.Inflater;

public class ZlibUtils {

	private final static String TAG = "ZlibUtils";

	public static byte[] compress(byte[] data) {
		if (data == null) {
			return null;
		}
		byte[] output = null;
		Deflater compresser = new Deflater();
		compresser.reset();
		compresser.setInput(data);
		compresser.finish();
		ByteArrayOutputStream bos = new ByteArrayOutputStream(data.length);
		try {
			byte[] buf = new byte[1024];
			while (!compresser.finished()) {
				int i = compresser.deflate(buf);
				bos.write(buf, 0, i);
			}
			output = bos.toByteArray();
			bos.close();
		} catch (Exception e) {
			output = data;
			L.e(TAG, "compress error:" +  e.toString());
		}

		compresser.end();
		return output;
	}

	public static byte[] decompress(byte[] data) {
		byte[] output = new byte[0];
		Inflater decompresser = new Inflater();
		decompresser.reset();
		decompresser.setInput(data);
		ByteArrayOutputStream o = new ByteArrayOutputStream(data.length);
		try {
			byte[] buf = new byte[1024];
			while (!decompresser.finished()) {
				int i = decompresser.inflate(buf);
				o.write(buf, 0, i);
			}
			output = o.toByteArray();
			o.close();
		} catch (Exception e) {
			output = data;
			L.e(TAG, "decompress error:" + e.toString());
			return null;
		}
		decompresser.end();
		return output;
	}
}
